#include "gtklabel.h"
#include "gtklinkbutton.h"
#include "gtkmarshalers.h"
-#include "gtknotebook.h"
+#include "gtkstack.h"
#include "gtkorientable.h"
#include "gtkscrolledwindow.h"
#include "gtktextview.h"
gchar **people;
} CreditSection;
-struct _GtkAboutDialogPrivate
+struct _GtkAboutDialogPrivate
{
gchar *name;
gchar *version;
GSList *credit_sections;
- gint credits_page;
- gint license_page;
+ gboolean credits_page_initialized;
+ gboolean license_page_initialized;
- GtkWidget *notebook;
+ GtkWidget *stack;
GtkWidget *logo_image;
GtkWidget *name_label;
GtkWidget *version_label;
guint hovering_over_link : 1;
guint wrap_license : 1;
+ guint in_child_changed : 1;
};
-/* The indexes of the credits and license page in the builder xml */
-#define CREDITS_PAGE_ID 1
-#define LICENSE_PAGE_ID 2
-
enum
{
PROP_0,
gtk_widget_class_set_template_from_resource (widget_class,
"/org/gtk/libgtk/gtkaboutdialog.ui");
- gtk_widget_class_bind_template_child_private (widget_class, GtkAboutDialog, notebook);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkAboutDialog, stack);
gtk_widget_class_bind_template_child_private (widget_class, GtkAboutDialog, logo_image);
gtk_widget_class_bind_template_child_private (widget_class, GtkAboutDialog, name_label);
gtk_widget_class_bind_template_child_private (widget_class, GtkAboutDialog, version_label);
static void
switch_page (GtkAboutDialog *about,
- gint page)
+ const gchar *name)
{
GtkAboutDialogPrivate *priv = about->priv;
- gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), page);
+ gtk_stack_set_visible_child_name (GTK_STACK (priv->stack), name);
}
static void
{
GtkAboutDialog *about = (GtkAboutDialog *)data;
- switch_page (about, 0);
+ switch_page (about, "main");
}
static void
GtkAboutDialogPrivate *priv = about->priv;
gboolean active;
+ if (priv->in_child_changed)
+ return;
+
active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button));
if (active)
{
+ priv->in_child_changed = TRUE;
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->license_button), FALSE);
+ priv->in_child_changed = FALSE;
display_credits_page (NULL, data);
}
else
GtkAboutDialogPrivate *priv = about->priv;
gboolean active;
+ if (priv->in_child_changed)
+ return;
+
active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button));
if (active)
{
+ priv->in_child_changed = TRUE;
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->credits_button), FALSE);
+ priv->in_child_changed = FALSE;
display_license_page (NULL, data);
}
else
gtk_widget_init_template (GTK_WIDGET (about));
- switch_page (about, 0);
+ switch_page (about, "main");
/* force defaults */
gtk_about_dialog_set_program_name (about, NULL);
GtkAboutDialog *about = (GtkAboutDialog *)data;
GtkAboutDialogPrivate *priv = about->priv;
- if (priv->credits_page == 0)
+ if (!priv->credits_page_initialized)
{
populate_credits_page (about);
- priv->credits_page = CREDITS_PAGE_ID;
+ priv->credits_page_initialized = TRUE;
}
- switch_page (about, priv->credits_page);
+ switch_page (about, "credits");
}
static void
GtkAboutDialog *about = (GtkAboutDialog *)data;
GtkAboutDialogPrivate *priv = about->priv;
- if (priv->license_page == 0)
+ if (!priv->license_page_initialized)
{
populate_license_page (about);
- priv->license_page = LICENSE_PAGE_ID;
+ priv->license_page_initialized = TRUE;
}
- switch_page (about, priv->license_page);
+ switch_page (about, "license");
}
/**
{
GtkAboutDialogPrivate *priv = about->priv;
- switch_page (about, 0);
+ switch_page (about, "main");
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->credits_button), FALSE);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->license_button), FALSE);
gtk_widget_hide (GTK_WIDGET (about));
</packing>
</child>
<child>
- <object class="GtkNotebook" id="notebook">
+ <object class="GtkStack" id="stack">
<property name="width_request">400</property>
<property name="height_request">100</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="show_tabs">False</property>
- <property name="show_border">False</property>
+ <property name="homogeneous">True</property>
+ <property name="transition-type">over-up-down</property>
<child>
<object class="GtkBox" id="page_vbox">
<property name="visible">True</property>
</packing>
</child>
</object>
- </child>
- <child type="tab">
- <placeholder/>
+ <packing>
+ <property name="name">main</property>
+ </packing>
</child>
<child>
<object class="GtkBox" id="credits_page">
</child>
</object>
<packing>
- <property name="position">1</property>
+ <property name="name">credits</property>
</packing>
</child>
- <child type="tab">
- <placeholder/>
- </child>
<child>
<object class="GtkBox" id="license_page">
<property name="visible">True</property>
</child>
</object>
<packing>
- <property name="position">2</property>
+ <property name="name">license</property>
</packing>
</child>
- <child type="tab">
- <placeholder/>
- </child>
</object>
<packing>
<property name="expand">True</property>